﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;
using System.Threading;
using 进窑工位采集服务.common;

namespace 进窑工位采集服务
{
    public partial class Service11 : ServiceBase
    {
        运行情况 _运行情况;

        进窑工位周期执行类 x;

        private Boolean flag = false;

        Thread three1;
        private Thread threadReadGKJ = null;                                               // 后台读取PLC的线程

        public Service11()
        {
            InitializeComponent();
            InitService();

            try
            {
                x = new 进窑工位周期执行类();
                _运行情况 = new 运行情况();
            }
            catch (Exception ex)
            {

                #region 错误日记
                //AppLog.WriteErr("开始就出问题"+ ex.Message);
                LogManager.LogInfo("新建类出错", ex.Message);
                #endregion
            }

        }
        /// <summary>
        /// 初始化服务参数
        /// </summary>
        private void InitService()
        {
            base.AutoLog = false;
            base.CanShutdown = true;
            base.CanStop = true;
            base.CanPauseAndContinue = true;
            base.ServiceName = "进窑工位采集服务";  //这个名字很重要，设置不一致会产生 1083 错误哦(在文章最后会说到这个问题)！
        }
        protected override void OnStart(string[] args)
        {
            try
            {
                //_运行情况 = new 运行情况();

                #region 服务启动日记
                //AppLog.WriteErr("服务启动");
                //LogManager.LogInfo("开始","服务启动");
                _运行情况.insert_into_软件运行情况("开始", "进窑服务启动", "中铁十四局福州管片厂");
                #endregion

		
            ////事件执行类 v = new 事件执行类(); /* 实例化对象 */

            ////x.ChangeNum1 += new 进窑工位周期执行类.NumManipulationHandler1(v.WriteLog1); /* 注册 */


            //string str采集周期 = ConfigHelper.GetValue("采集周期").ToLower();

            //int MyInt = Convert.ToInt32(str采集周期);


            //System.Timers.Timer t = new System.Timers.Timer(MyInt);//实例化Timer类，设置间隔时间为10000毫秒；

            ////或者是实例化时不传递参数.通过 myTimer.Interval=1000; 来设置间隔时间;

            //t.Elapsed += new System.Timers.ElapsedEventHandler(x.theout);//到达时间的时候执行事件； 

            ////t.AutoReset = true;//设置是执行一次（false）还是一直执行(true)；

            //t.AutoReset = false;//设置是执行一次（false）还是一直执行(true)； 

            //t.Enabled = true;//是否执行System.Timers.Timer.Elapsed事件； 


                flag = true;

                three1 = new Thread(test);

                three1.Start();

                //threadReadGKJ = new Thread(new System.Threading.ThreadStart(ThreadBackgroundReadPlc));
                //threadReadGKJ.IsBackground = true;
                //threadReadGKJ.Priority = ThreadPriority.AboveNormal;
                //threadReadGKJ.Start();


            }
            catch (Exception ex)
            {

                #region 错误日记
                //AppLog.WriteErr("开始就出问题"+ ex.Message);
                LogManager.LogInfo("进窑开始就出问题  ", ex.Message);
                #endregion

            }
        }

        protected override void OnStop()
        {
            #region 服务启动日记
            _运行情况.insert_into_软件运行情况("停止", "进窑服务停止", "中铁十四局福州管片厂");
            #endregion

            flag = false;

            Thread.Sleep(500);
        }

        public void test()
        {
            while (flag)
            {
                Thread.Sleep(500);
                x.theout();
            }
        }

    }
}
